home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 98
/
Skunkware 98.iso
/
src
/
net
/
bind-contrib.tar.gz
/
bind-contrib.tar
/
contrib
/
tic
/
make_rev
< prev
next >
Wrap
Text File
|
1996-10-25
|
2KB
|
82 lines
#!/bin/sh
# @(#) make_rev 1.2 92/08/31 @(#)
# make the reverse mapping file from a DNS database
#
# Copyright (c) 1992 by Texas Internet Consulting
# This code may be freely copied and used so long as this
# copyright notice is attached. This code may not be sold
# without the express written permission of Texas Internet Consulting.
# Texas Internet Consulting makes no warranty as to the correctness
# nor the applicability of this code for any purpose.
DNS_DOMAIN=$1
DNS_NETWORK=$2
# the reverse template file
REV_HEAD=hosts.revhead
# calculate the reverse domain from the network
# the assumption is subnets are divided along byte boundaries
DNS_REVDOMAIN=`echo $DNS_NETWORK | awk -F. '{
for (i = NF; i>0; i--) {
if ($i == 0) continue
revdomain = revdomain $i "."
}
revdomain = substr(revdomain, 1, length(revdomain)-1)
print revdomain
}'`
# update the serial field
serial=`cat serial`
echo "; $serial" >f.${DNS_NETWORK}
sed "s/<SERIAL>/$serial/" ${REV_HEAD} >>f.${DNS_NETWORK}
# build the reverse map
awk '
BEGIN {
domain = "'${DNS_DOMAIN}'."
reverse = "'${DNS_REVDOMAIN}'"
split(reverse, revbytes, ".")
nrevbytes = 0
for (i in revbytes)
nrevbytes++
}
/IN A|in a/ {
# hostname is a blank
if ($1 == "IN" && $2 == "A" || $1 == "in" && $2 == "a") {
address = $3
}
# special ugly nasty case - no reverse map for the domain itself
# an A record is added for non-mx mailers, but by convention the
# name of the domain gateway is domain.domain...
else if ($1 == "@") {
next
}
else {
host = $1
address = $4
}
# split the host address apart and reverse it
split(address, byte, ".")
for (i=1; i<=nrevbytes; i++) {
if (byte[i] != revbytes[nrevbytes-i+1])
break
}
# address is in this zone
if (i > nrevbytes) {
rev = ""
for (j=4; j>nrevbytes; j--) {
if (j < 4)
rev = rev "."
rev = rev byte[j]
}
# print the PTR record
# if it end in a "." then do not create a PTR record
if (host !~ /\.$/) {
printf("%s IN PTR ", rev)
if (host == "")
printf("%s\n", domain)
else
printf("%s.%s\n", host, domain)
}
}
}' ${DNS_DOMAIN} >>f.${DNS_NETWORK}